#include<stdio.h>
#include<sys/types.h>
#include<signal.h>
#include<unistd.h>
void PrintPending(sigset_t* p)
{
    int i=0;
    for(;i<32;i++)
    {
        if(sigismember(p,i))
            printf("1");
        else 
            printf("0");
    }
    printf("\n");
}

void handler(int signo)
{
    printf("get a signal:%d\n",signo);
}
int main()
{
    //捕获2号信号
    signal(2,handler);
    sigset_t set,oset;
    sigemptyset(&set);
    sigemptyset(&oset);
    
    sigaddset(&set,2);//添加
    sigprocmask(SIG_SETMASK,&set,&oset);//设置block位图，阻塞2号信号
    
    sigset_t pending;
    sigemptyset(&pending);

    int cnt=0;
    while(1)
    {
        sigpending(&pending);
        PrintPending(&pending);
        sleep(1);
        cnt++;
        if(cnt==5)
        {
            sigprocmask(SIG_SETMASK,&oset,&set);//还原为之前的block位图，不再阻塞2号信号
        }
    }
    return 0;
}
